package com.lhd.struct.proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
 * @Author: liuhd
 * @Date: 2024/12/16 15:40
 * @Description: 创建代理类的工厂
 */
public class ProxyFactory {
    // 目标对象
    private SellTickets trainStation = new TrainStation();

    // 创建代理类
    public SellTickets getProxy(){
        // Proxy动态代理类是用于创建代理类的
        // param : 类加载器，目标接口，代理方法的处理对象
        SellTickets proxy = (SellTickets) Proxy.newProxyInstance(trainStation.getClass().getClassLoader(), trainStation.getClass().getInterfaces(),
                new InvocationHandler() {
                    // param :
                    // proxy: 最终生成的代理对象，在这里没啥用处
                    // method: 接口中的方法，代理类调用谁在这里就是谁
                    // args: 方法的参数
                    // return: 接口方法的返回值
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("服务点收取费用");
                        Object ret = method.invoke(trainStation, args);
                        return ret;
                    }
                });

        return proxy;
    }
}